package yt.demo.appcommondb.tools;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class TreeHelper {

    /**
     * 获取子节点 ID 列表
     *
     * @param items        包含所有节点的列表
     * @param parentIdField 节点的父级 ID 字段名
     * @param idField      节点的 ID 字段名
     * @param parentId     当前节点的父级 ID
     * @param includeParent  是否包括当前节点的 ID
     * @return 子节点 ID 列表
     */
    public static List<Long> getChildrenIds(List<Map<String, Object>> items,
                                            String parentIdField,
                                            String idField,
                                            Long parentId,
                                            boolean includeParent) {
        List<Long> childrenIds = new ArrayList<>();

        for (Map<String, Object> item : items) {
            // 检查当前项的父级 ID 是否与给定的 parentId 相等
            if (item.get(parentIdField).equals(parentId)) {
                // 添加当前项的 ID
                childrenIds.add((Long) item.get(idField));

                // 递归调用获取子节点
                childrenIds.addAll(getChildrenIds(items, parentIdField, idField, (Long) item.get(idField), false));
            }
        }
        // 如果需要包括当前节点的 ID
        if (includeParent) {
            childrenIds.add(parentId);
        }

        return childrenIds;
    }


}
